// 验证token
const jwt = require('./jwt');
const { pathToRegexp } = require('path-to-regexp');
const { getError } = require('./getSendResult');
// 不需要验证的api
const noNeedTokenApi = [
    {
        method: "POST", path: "/api/user/login",
    },
    {
        method: "POST", path: "/api/user/createUser"
    }
]



// 解析token
module.exports = (req, res, next) => {
    // 判断哪些不需要验证登录的api
    const apis = noNeedTokenApi.filter((api) => {
        const reg = pathToRegexp(api.path);
        return api.method === req.method && reg.test(req.path);
    })
    if (apis.length > 0) {
        // 表示有 不需要验证的api,直接next();
        next();
        return;
    }

    const token = jwt.verify(req);
    if (token) {
        // 认证通过
        // id 可以是用户 或则管理员的id
        req.id = token.id;
        next();
    } else {
        // 认证失败
        handleNoToken(req, res, next);
    }
}

// 处理没有认证的情况  
function handleNoToken(req, res, next) {
    res.send(getError("没有登录,没有访问权限!", 403));
}